home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / General / SpriteWorld 1.0b3 / Headers / Sprite.h < prev    next >
Text File  |  1993-06-05  |  7KB  |  170 lines

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Created:    Tuesday, October 27, 1992 at 10:10:06 PM
  5. //    By:        Tony Myles
  6. //
  7. //    Copyright: © 1991-93 Tony Myles, All rights reserved worldwide
  8. //
  9. //    Description:    constants, structures, and prototypes for sprites
  10. ///--------------------------------------------------------------------------------------
  11.  
  12.  
  13. #ifndef __SPRITE__
  14. #define __SPRITE__
  15.  
  16. #ifndef __TIMER__
  17. #include <Timer.h>
  18. #endif
  19.  
  20. #ifndef __FRAME__
  21. #include "Frame.h"
  22. #endif
  23.  
  24. #ifndef SW_PASCAL
  25. #define SW_PASCAL
  26. #endif
  27.  
  28.  
  29. ///--------------------------------------------------------------------------------------
  30. //    time task data structure
  31. ///--------------------------------------------------------------------------------------
  32.  
  33. typedef struct TimeTaskRec TimeTaskRec;
  34. typedef TimeTaskRec *TimeTaskPtr, **TimeTaskHdl;
  35.  
  36. struct TimeTaskRec
  37. {
  38.     TMTask timeTask;
  39.     Boolean hasTaskFired;
  40. };
  41.  
  42.  
  43. ///--------------------------------------------------------------------------------------
  44. //    sprite type definitions
  45. ///--------------------------------------------------------------------------------------
  46.  
  47. typedef struct SpriteRec SpriteRec;
  48. typedef SpriteRec *SpritePtr, **SpriteHdl;
  49.  
  50. #ifdef __cplusplus
  51. extern "C" {
  52. #endif
  53.  
  54. typedef SW_PASCAL void (*DrawProcPtr)(FramePtr srcFrameP, FramePtr dstFrameP, Rect *srcRect, Rect *dstRect);
  55. typedef SW_PASCAL void (*MaskDrawProcPtr)(FramePtr srcFrameP, FramePtr dstFrameP, Rect *srcRect, Rect *dstRect, RgnHandle maskRgn);
  56. typedef SW_PASCAL void (*FrameProcPtr)(SpritePtr srcSpriteP, FramePtr curFrameP, long *frameIndex);
  57. typedef SW_PASCAL void (*MoveProcPtr)(SpritePtr srcSpriteP, Point *spriteLoc);
  58. typedef SW_PASCAL void (*CollideProcPtr)(SpritePtr srcSpriteP, SpritePtr dstSpriteP, Rect* sectRect);
  59.  
  60. #ifdef __cplusplus
  61. };
  62. #endif
  63.  
  64. ///--------------------------------------------------------------------------------------
  65. //    sprite data structure
  66. ///--------------------------------------------------------------------------------------
  67.  
  68. struct SpriteRec
  69. {
  70.     SpritePtr nextSpriteP;                    // next sprite
  71.     SpritePtr prevSpriteP;                    // previous sprite
  72.  
  73.         // drawing fields
  74.     Boolean isVisible;                        // draw the sprite?
  75.     Boolean needsToBeDrawn;                    // sprite has changed, needs to be drawn
  76.     Boolean needsToBeErased;                // sprite needs to be erased onscreen
  77.     char pad1;
  78.     Rect destFrameRect;                        // frame destination rectangle
  79.     Rect oldFrameRect;                        // last frame destination rectangle
  80.     Rect deltaFrameRect;                        // union of the sprite’s lastRect and curRect
  81.     RgnHandle screenMaskRgn;                // mask region for drawing sprite to screen
  82.     DrawProcPtr frameDrawProc;                // callback to draw sprite
  83.  
  84.         // frame fields
  85.     TimeTaskRec frameTimeTask;                // frame advance time task
  86.     FramePtr *frameArray;                    // array of frames
  87.     FramePtr curFrameP;                        // current frame
  88.     long numFrames;                            // number of frames
  89.     long maxFrames;                            // maximum number of frames
  90.     long frameTimeInterval;                    // time interval to advance frame
  91.     long frameAdvance;                        // amount the adjust frame index
  92.     long curFrameIndex;                        // current frame index
  93.     long firstFrameIndex;                    // first frame to advance
  94.     long lastFrameIndex;                        // last frame to advance
  95.     FrameProcPtr frameChangeProc;            // callback to change frames
  96.  
  97.         // movement fields
  98.     TimeTaskRec moveTimeTask;                // movement time task
  99.     long moveTimeInterval;                    // time interval to move sprite
  100.     short horizMoveDelta;                    // horizontal movement delta
  101.     short vertMoveDelta;                        // vertical movement delta
  102.     Rect moveBoundsRect;                        // bounds of the sprite’s movement
  103.     MoveProcPtr spriteMoveProc;            // callback to handle movement
  104.  
  105.         // collision detection fields
  106.     Rect collideRect;                            // collision detection rectangle (not used currently)
  107.     CollideProcPtr spriteCollideProc;    // callback to handle collisions
  108.  
  109.     long userData;                                // reserved for user
  110. };
  111.  
  112.  
  113. ///--------------------------------------------------------------------------------------
  114. //    sprite function prototypes
  115. ///--------------------------------------------------------------------------------------
  116.  
  117. #ifdef __cplusplus
  118. extern "C" {
  119. #endif
  120.  
  121. SW_PASCAL OSErr SWCreateSprite(SpritePtr* newSpriteP, void* spriteStorageP, short maxFrames);
  122. SW_PASCAL OSErr SWCreateSpriteFromCIconResource(SpritePtr* newSpriteP, void* spriteStorageP,
  123.                                                         short cIconID, short maxFrames, MaskType maskType);
  124. SW_PASCAL OSErr SWCreateSpriteFromPictResource(SpritePtr* newSpriteP, void* spriteStorageP,
  125.                                 short pictResID, short maskResID, short maxFrames, MaskType maskType);
  126. SW_PASCAL OSErr SWCloneSprite(SpritePtr cloneSpriteP, SpritePtr *newSpriteP, void* spriteStorageP);
  127. SW_PASCAL void SWDisposeSprite(SpritePtr oldSpriteP, Boolean disposeFrames);
  128. SW_PASCAL void SWCloseSprite(SpritePtr deadSpriteP, Boolean disposeFrames);
  129.  
  130. SW_PASCAL void SWLockSprite(SpritePtr srcSpriteP);
  131. SW_PASCAL void SWUnlockSprite(SpritePtr srcSpriteP);
  132. SW_PASCAL void SWSetSpriteDrawProc(SpritePtr srcSpriteP, DrawProcPtr drawProc);
  133.  
  134. SW_PASCAL OSErr SWAddFrame(SpritePtr srcSpriteP, FramePtr newFrameP);
  135. SW_PASCAL void SWRemoveFrame(SpritePtr srcSpriteP, FramePtr oldFrameP);
  136. SW_PASCAL void SWSetCurrentFrame(SpritePtr srcSpriteP, FramePtr curFrameP);
  137. SW_PASCAL void SWSetCurrentFrameIndex(SpritePtr srcSpriteP, short frameIndex);
  138. SW_PASCAL void SWSetSpriteFrameAdvance(SpritePtr srcSpriteP, short frameAdvance);
  139. SW_PASCAL void SWSetSpriteFrameRange(SpritePtr srcSpriteP, short firstFrameIndex, short lastFrameIndex);
  140. SW_PASCAL void SWSetSpriteFrameTime(SpritePtr srcSpriteP, long timeInterval);
  141. SW_PASCAL void SWSetSpriteFrameProc(SpritePtr srcSpriteP, FrameProcPtr frameProc);
  142.  
  143. SW_PASCAL void SWMoveSprite(SpritePtr srcSpriteP, short horizLoc, short vertLoc);
  144. SW_PASCAL void SWOffsetSprite(SpritePtr srcSpriteP, short horizDelta, short vertDelta);
  145. SW_PASCAL void SWSetSpriteLocation(SpritePtr srcSpriteP, short horizLoc, short vertLoc);
  146. SW_PASCAL void SWSetSpriteMoveBounds(SpritePtr srcSpriteP, Rect* moveBoundsRect);
  147. SW_PASCAL void SWSetSpriteMoveDelta(SpritePtr srcSpriteP, short horizDelta, short vertDelta);
  148. SW_PASCAL void SWSetSpriteMoveTime(SpritePtr srcSpriteP, long timeInterval);
  149. SW_PASCAL void SWSetSpriteMoveProc(SpritePtr srcSpriteP, MoveProcPtr moveProc);
  150. SW_PASCAL void SWBounceSpriteMoveProc(SpritePtr srcSpriteP, Point* spritePoint);
  151. SW_PASCAL void SWWrapSpriteMoveProc(SpritePtr srcSpriteP, Point* spritePoint);
  152.  
  153. SW_PASCAL void SWSetSpriteCollideProc(SpritePtr srcSpriteP, CollideProcPtr collideProc);
  154. SW_PASCAL void SWSetSpriteVisible(SpritePtr srcSpriteP, Boolean isVisible);
  155. SW_PASCAL Boolean SWIsSpriteInRect(SpritePtr srcSpriteP, Rect* testRect);
  156.  
  157. SW_PASCAL void SWStdDrawProc(FramePtr srcFrameP, FramePtr dstFrameP, Rect* srcRect, Rect* dstRect);
  158. SW_PASCAL void SWStdMaskDrawProc(FramePtr srcFrameP, FramePtr dstFrameP,
  159.                                 Rect* srcRect, Rect* dstRect, RgnHandle maskRgn);
  160. pascal void SWTimeTask(void);
  161. SW_PASCAL Boolean SWIsTaskPrimed(TMTask* tmTaskP);
  162.  
  163. #ifdef __cplusplus
  164. };
  165. #endif
  166.  
  167.  
  168. #endif    /* __SPRITE__ */
  169.  
  170.